set @variable = expression [, @variable = expression...]
allows
multiple variable assignments in one statement. The set @variable = expression
command is an identical -- and an alternative -- command to select @variable =
expression in Transact-SQL.
expression
includes
constant, function, any combination of constants, and functions connected by
arithmetic or bitwise operators, or a subquery.
set ansi_datatypes {on | off}
determines
how Adaptive Server interprets the timestamp keyword:
By
default, ansi_datatypes is set off, causing Adaptive Server to interpret
timestamp as the Transact-SQL timestamp user-defined datatype. You must specify
the ansi_timestamp type to create or reference ANSI-compliant timestamp types.
When
ansi_datatypes is set on, Adaptive Server interprets timestamp as the
ANSI-compliant timestamp system datatype. You must specify the syb_timestamp
type to create or reference the Transact-SQL timestamp user-defined datatype.
set ansinull {on | off}
impacts
on both aggregate and comparison behaviors:
Aggregate
behavior
ansinull
determines whether evaluation of NULL-valued operands in aggregate functions is
compliant with the ANSI SQL standard. If you use set ansinull on, Adaptive
Server generates a warning when an aggregate function eliminates a null-valued
operand from the calculation.
For
example, if you perform the following query on the titles table with set
ansinull off (the default value):
select max(total_sales) from titles
Adaptive Server returns:
-----------
22246
However,
if you perform the same query with set ansinull on, Adaptive Server returns the
same value and an error message because the total_sales column contains NULL
values:
-----------
22246
Warning - null value eliminated in set function
This
message indicates that some entries in total_sales contain NULL instead of a
real amount, so you do not have complete data on total sales for all books in
this table. However, of the available data, the value returned is the highest.
Comparison
behavior
The
SQL standard requires that if either one of the two operands of an equality
comparison is NULL, the result is UNKNOWN. Transact-SQL treats NULL values
differently. If one of the operands is a column, parameter, or variable, and
the other operand is the NULL constant or a parameter or variable whose value
is NULL, the result is either TRUE or FALSE:
Sybase NULL mode - "val = NULL" is true
when "val" is NULL
ANSI NULL mode - "val = NULL" is unknown
when "val" is NULL
The
ANSI rule for the where and on clauses return rows that are true, and rejects
rows that are both false and unknown.
The
ANSI rule for a check constraint rejects values that are false. For this
reason, unknown or true results are not rejected.
If you:
Enable
ansinull mode - do not use the Sybase NULL comparisons (val = NULL
or val != NULL).
Expect
to use ANSI-null mode during insert and update - do not use the Sybase NULL
comparisons in check constraints.
Instead,
use the ANSI IS NULL or IS NOT NULL syntax to prevent from having unexpected results.
set ansi_permissions {on | off}
determines
whether ANSI SQL permission requirements for delete and update
statements are checked. The default is off. Table 1-36 summarizes permission requirements:
Table 1-36: Permissions
required for update and delete Command |
Permissions required with set
ansi_permissions off |
Permissions required with set
ansi_permissions on |
Update |
update permission on columns where values are being set |
update permission on columns where values are being set select permission on all columns appearing in where
clause select permission on all columns on right side of set
clause |
Delete |
delete permission on table |
delete permission on table select permission on all columns appearing in where
clause |
set arithabort {on | off}
determines how Adaptive Server behaves when an arithmetic error occurs. The two arithabort options, arithabort arith_overflow and arithabort numeric_truncation, handle different types of arithmetic errors. You can set each option independently or set both options with a single set arithabort on or set arithabort off statement.
set arithabort arith_overflow {on | off}
arithabort arith_overflow specifies Adaptive Server's behavior following a divide-by-zero error or a loss of precision during an explicit or implicit datatype conversion. This type of error is serious. The default setting, arithabort arith_overflow on, rolls back the entire transaction in which the error occurs. If the error occurs in a batch that does not contain a transaction, arithabort arith_overflow on does not roll back earlier commands in the batch; however, Adaptive Server does not execute any statements in the batch that follow the error-generating statement.
If
you set arithabort arith_overflow off, Adaptive Server aborts the statement
that causes the error, but continues to process other statements in the
transaction or batch.
set arithabort [arith_overflow | numeric_truncation]{on |
off}
arithabort numeric_truncation specifies Adaptive Server's behavior following a loss of scale by an exact numeric type during an implicit datatype conversion. (When an explicit conversion results in a loss of scale, the results are truncated without warning.) The default setting, arithabort numeric_truncation on, aborts the statement that causes the error, but Adaptive Server continues to process other statements in the transaction or batch. If you set arithabort numeric_truncation off, Adaptive Server truncates the query results and continues processing.
set arithignore [arith_overflow] {on | off}
determines
whether Adaptive Server displays a message after a divide-by-zero error or a
loss of precision. By default, the arithignore option is set to off. This
causes Adaptive Server to display a warning message after any query that
results in numeric overflow. To have Adaptive Server ignore overflow errors,
use set arithignore on. You can omit the optional arith_overflow keyword
without any effect.
set bulk array size number
establishes the number of rows that are buffered in local server memory before being transferred using the bulk copy interface.
Use
this option only with Component Integration Services for transferring rows to a
remote server using select into.
View
your current setting using the @@bulkarraysize global variable.
number
indicates the number of rows to buffer. If the rows being transferred contain
text, image or java ADTs, then the bulk copy interface ignores the current
setting for array size and uses a value of 1. Also, the array size actually
used will never exceed the value of @@bulkbatchzise. If @@bulkbatchsize is
smaller than array size, then the smaller value is used.
The
initial value of the array size is inherited by new connections from the
current setting of the configuration property cis bulk insert array size, which
defaults to 50. Setting this value to 0 will reset the value to the default.
set bulk batch size number
establishes the number of rows transferred to a remote server via select into proxy_table when the bulk interface is used. The bulk interface is available to all Adaptive Servers, as well as DirectConnect for Oracle version 12.5.1.
Use
this option only with Component Integration Services for transferring rows to a
remote server using select into.
View
your current setting using the @@bulkbatchsize global variable.
The
bulk interface allows a commit after a specified number of rows. This allows the
remote server to free any log space being consumed by the bulk transfer
operation, and enables the transfer of large data sets from one server to
another without filling the transaction log.
The
initial value of the batch size is inherited by new connections from the
current setting of the configuration property cis bulk insert batch size, which
by default is 0. A value of 0 indicates that no rows should be committed until
after the last row is transferred.
set chained {on | off}
begins a transaction just before the first data retrieval or data modification statement at the beginning of a session and after a transaction ends. In chained mode, Adaptive Server implicitly executes a begin transaction command before the following statements: delete, fetch, insert, open, select, and update. You cannot execute set chained within a transaction.
set close on endtran {on | off}
causes Adaptive Server to close all cursors opened within a transaction at the end of that transaction. A transaction ends by the use of either the commit or rollback statement. However, only cursors declared within the scope that sets this option (stored procedure, trigger, and so on) are affected.
set char_convert {off | on [with {error | no_error}] |
charset [with
{error | no_error}]}
enables or disables character set conversion between Adaptive Server and a client. If the client is using Open Client DB-Library release 4.6 or later, and the client and server use different character sets, conversion is turned on during the login process and is set to a default based on the character set the client is using. You can also use set char_convert charset to start conversion between the server character set and a different client character set.
charset
can be either the character set's ID or a name from syscharsets with a type
value of less than 2000.
set
char_convert off turns conversion off so that characters are sent and received
unchanged. set char_convert on turns conversion on if it is turned off. If
character set conversion was not turned on during the login process or by the
set char_convert command, set char_convert on generates an error message.
If
you request character set conversion with set char_convert charset, and
Adaptive Server cannot perform the requested conversion, the conversion state
remains the same as it was before the request. For example, if conversion is
set to off prior to the set char_convert charset command, conversion remains
turned off if the request fails.
When
the with no_error option is included, Adaptive Server does not notify an
application when characters from Adaptive Server cannot be converted to the
client's character set. Error reporting is initially turned on when a client
connects with Adaptive Server: if you do not want error reporting, you must turn
it off for each session with set char_convert {on | charset} with no_error. To
turn error reporting back on within a session, use set char_convert {on |
charset} with error.
Whether
or not error reporting is turned on, the bytes that cannot be converted are
replaced with ASCII question marks (?).
set cis_rpc_handling {on | off}
determines whether Component Integration Services handles outbound remote procedure call (RPC) requests by default.
set clientapplname application_name
assigns
an application an individual name. This is useful for differentiating among
clients in a system where many clients connect to Adaptive Server using the
same application name. After you assign a new name to an application, it
appears in the sysprocesses table under the new name.
set clienthostname
host_name
assigns
a host an individual name. This is useful for differentiating among clients in
a system where many clients connect to Adaptive Server using the same host
name. After you assign a new name to a host, it appears in the sysprocesses
table under the new name.
set clientname client_name
assigns
a client an individual name. This is useful for differentiating among clients
in a system where many clients connect to Adaptive Server using the same client
name. After you assign a new name to a user, they appear in the sysprocesses
table under the new name.
set cursor rows number for cursor_name
causes Adaptive Server to return the number of rows for each cursor fetch request from a client application. The number can be a numeric literal with no decimal point or a local variable of type integer. If the number is less than or equal to zero, the value is set to 1. You can set the cursor rows option for a cursor, whether it is open or closed. However, this option does not affect a fetch request containing an into clause. cursor_name specifies the cursor for which to set the number of rows returned.
set datefirst number
uses
numeric settings to specify the first day of the week. The us_english language
default is Sunday. To set the first day of the week, use the following:
To set the first day of
the week as |
Use this setting |
Monday |
1 |
Tuesday |
2 |
Wednesday |
3 |
Thursday |
4 |
Friday |
5 |
Saturday |
6 |
Sunday (us_english
language default) |
7 |
Regardless
of which day you set as the first day of the week, the value of that first day
becomes 1. This value is not the same as the numeric setting you use in set
datefirst n. For example, if you set Sunday as your first day of the week,
its value is 1. If you set Monday as your first day of the week, Monday's value
becomes 1. If you set Wednesday as your first day of the week, Wednesday's
value becomes 1, and so on.
set dateformat format,
sets
the order of the date parts month/day/year for entering datetime ,
smalldatetime, date or time data. Valid arguments are mdy, dmy, ymd, ydm, myd,
and dym. The us_english language default is mdy.
set explicit_transaction_required [true | false]
when
set to true, causes any attempts to start an implicit transaction, or send an
RPC to a remote server outside a transaction, to fail.All other commands
succeed.
set fipsflagger {on | off}
determines
whether Adaptive Server displays a warning message when Transact-SQL extensions
to entry-level ANSI SQL are used. By default, Adaptive Server does not tell you
when you use nonstandard SQL. This option does not disable SQL extensions.
Processing completes when you issue the non-ANSI SQL command.
set flushmessage {on | off}
determines when Adaptive Server returns messages to the user. By default, messages are stored in a buffer until the query that generated them is completed or the buffer is filled to capacity. Use set flushmessage on to return messages to the user immediately, as they are generated.
set forceplan {on | off}
causes the query optimizer to use the order of the tables in the from clause of a query as the join order for the query plan. forceplan is generally used when the optimizer fails to choose a good plan. Forcing an incorrect plan can have severely bad effects on I/O and performance.
set identity_insert [database.[owner.]]table_name {on | off}
determines whether explicit inserts into a table's IDENTITY column are allowed. (Updates to an IDENTITY column are never allowed.) This option can be used only with base tables. It cannot be used with views or set within a trigger.
Setting
identity_insert table_name on allows the table owner, Database Owner, or System
Administrator to explicitly insert a value into an IDENTITY column. Inserting a
value into the IDENTITY column allows you to specify a seed value for the
column or to restore a row that was deleted in error. Unless you have created a
unique index on the IDENTITY column, Adaptive Server does not verify the
uniqueness of the inserted value; you can insert any positive integer.
The
table owner, Database Owner, or System Administrator can use the set
identity_insert table_name on command on a table with an IDENTITY column to
enable the manual insertion of a value into an IDENTITY column. However, only
the following users can actually insert a value into an IDENTITY column, when
identity_insert is on:
Table
owner
Database
Owner:
if
granted explicit insert permission on the column by the table owner
impersonating
the table owner by using the setuser command
Setting
identity_insert table_name off restores the default behavior by prohibiting
explicit inserts to IDENTITY columns. At any time, you can use set
identity_insert table_name on for a single database table within a session.
set identity_update table_name {on | off}
With set identity_update on, you can explicitly update the value of the IDENTITY column on a table. identity_update changes the identity column value for the qualified rows. When identity_update is enabled, you can update the identity value to any value greater than 0. However, if the input value is greater than the identity burn max value, a new set of ID values is allocated, and the identity burn max value on the OAM page is updated accordingly. If update is included in a transaction, the new identity burn max value cannot be rolled back. You can use syb_identity to point to the identity column for update. For example:
update table_name set syb_identity = value
where
clause
Adaptive
Server does not check for duplicates entries or verify that entries are unique.
You can update an existing value to any positive integer within the range
allowed by the column's declared precision. You can check for duplicate entries
by creating a unique index on the identity column
set jtc {on | off}
toggles
join transitive closure. If tableA colA equals tableB colB and tableB colB
equals
tableC
colC, then the ASE knows tableA colA equals tableC colC.
is
the official name of the language that displays system messages. The language
must be installed on Adaptive Server. The default is us_english.
set lock { wait [ numsecs ] | nowait }
lock
wait
specifies
the length of time that a command waits to acquire locks before aborting and
returning an error.
numsecs
specifies
the number of seconds a command is to wait to acquire a lock. Valid values are
from 0 to 2147483647, the maximum value for an integer.
lock
nowait
specifies
that if a command cannot acquire a lock immediately, it returns an error and
fails. set lock nowait is equivalent to set lock wait 0.
controls the display of rows affected by a statement. set nocount on disables the display of rows; set nocount off reenables the count of rows.
compiles each query but does not execute it. noexec is often used with showplan. After you set noexec on, no subsequent commands are executed (including other set commands) until you set noexec off.
compiles
each subsequent query but does not execute it. set fmtonly on is often used
with showplan for troubleshooting. Set noexec on immediately after executing a
query. After you set noexec on, no subsequent commands are executed (including
other set commands) until you set noexec off. set noexec can be used in stored
procedures.
set offsets {select, from, order, compute, table,
procedure, statement, param, execute} {on |
off}
returns the position of specified keywords (with relation to the beginning of the query) in Transact-SQL statements. The keyword list is a comma-separated list that can include any of the following Transact-SQL constructs: select, from, order, compute, table, procedure, statement, param, and execute. Adaptive Server returns offsets if there are no errors. This option is used in Open Client DB-Library only.
set parallel_degree number
specifies an upper limit for the number of worker processes used in the parallel execution of a query. This number must be less than or equal to the number of worker processes per query, as set by the max parallel degree configuration parameter. The @@parallel_degree global variable stores the current setting.
checks the syntax of each query and returns any error messages without compiling or executing the query. Do not use parseonly inside a stored procedure or trigger.
set plan {dump | load } [group_name] {on | off}
plan
introduces an abstract plan command.
dump
enables
or disables capturing abstract plans for the current connection. If a
group_name is not specified, the plans are stored in the default group,
ap_stdout.
load
enables
or disables loading abstract plans for the current connection. If a group_name
is not specified, the plans are loaded from the default group, ap_stdin.
group_name
is the name of the abstract plan group to use for
loading or storing plans.
set plan exists check {on | off}
when used with set plan load, stores hash keys for up to 20 queries from an abstract plan group in a per-user cache.
set plan replace {on | off}
enables
or disables replacing existing abstract plans during plan capture mode. By
default, plan replacement is off.
set prefetch [on|off]
enables
or disables large I/Os to the data cache.
set process_limit_action {abort | quiet | warning}
specifies whether Adaptive Server executes parallel queries when an insufficient number of worker processes is available. Under these circumstances, when process_limit_action is set to quiet, Adaptive Server silently adjusts the plan to use a degree of parallelism that does not exceed the number of available processes. If process_limit_action is set to warning when an insufficient number of worker processes are available, Adaptive Server issues a warning message when adjusting the plan; and if process_limit_action is set to abort, Adaptive Server aborts the query and issues an explanatory message an insufficient number of worker processes are available.
returns the ID number of the stored procedure to Open Client DB-Library/C (not to the user) before sending rows generated by the stored procedure.
set proxy login_name
allows
you to assume the permissions, login name, and suid (server user ID) of
login_name. For login_name, specify a valid login from master..syslogins,
enclosed in quotation marks. To revert to your original login name and suid,
use set proxy with your original login_name.
Without
explicit permission, neither the "sa_role" nor the
"sso_role" can issue the set proxy login_name command. To use set
proxy login_name, any user, including the System Security Officer, must have
permission explicitly granted by the System Security Officer.
set quoted_identifier {on | off}
determines whether Adaptive Server recognizes delimited identifiers. By default, quoted_identifier is off and all identifiers must conform to the rules for valid identifiers. If you use set quoted_identifier on, you can use table, view, and column names that begin with a nonalphabetic character, include characters that would not otherwise be allowed, or are reserved words, by enclosing the identifiers within double quotation marks. Delimited identifiers cannot exceed 28 bytes, may not be recognized by all front-end products, and may produce unexpected results when used as parameters to system procedures.
When
quoted_identifier is on, all character strings enclosed within double quotes
are treated as identifiers. Use single quotes around character or binary
strings.
set role {"sa_role" | "sso_role" |
"oper_role" |
role_name [with
passwd "password"]} {on | off}
role
turns
the specified role on or off during the current session. When you log in, all
system roles that have been granted to you are turned on. Use set role
role_name off to turn a role off, and set role role_name on to turn it back on
again, as needed. System roles are "sa_role", "sso_role",
and "oper_role". If you are not a user in the current database, and
if there is no "guest" user, you cannot set sa_role off, because
there is no server user ID for you to assume.
role_name
is
the name of any user-defined role created by the System Security Officer.
User-defined roles are not turned on by default. To set user-defined roles to
activate at login, the user or the System Security Officer must use set role
on.
with
passwd
specifies
the password to activate the role. If a user-defined role has an attached
password, you must specify the password to activate the role.
set rowcount number
causes Adaptive Server to stop processing the query
(select, insert, update, or delete)after the specified number of rows are
affected. The number can be a numeric literal with no decimal point or a local
variable of type integer. To turn this option off, use: set rowcount 0
set scan_parallel_degree number
specifies the maximum session-specific degree of parallelism for hash-based scans (parallel index scans and parallel table scans on nonpartitioned tables). This number must be less than or equal to the current value of the max scan parallel degree configuration parameter. The @@scan_parallel_degree global variable stores the current setting.
determines whether Adaptive Server allows triggers to cause themselves to fire again (this is called self recursion). By default, Adaptive Server does not allow self recursion in triggers. You can turn this option on only for the duration of a current client session; its effect is limited by the scope of the trigger that sets it. For example, if the trigger that sets self_recursion on returns or causes another trigger to fire, this option reverts to off. This option works only within a trigger and has no effect on user sessions.
set session authorization login_name
is identical to set proxy, with this exception: set session authorization follows the SQL standard, while set proxy is a Transact-SQL extension.
generates a description of the processing plan for the query. The results of showplan are of use in performance diagnostics. showplan does not print results when it is used inside a stored procedure or trigger. For parallel queries, showplan output also includes the adjusted query plan at runtime, if applicable.
set sort_merge {on | off}
enables
or disables the use of sort-merge joins during a session.
generates a description of the sorting plan for a create index statement. The results of sort_resources are of use in determining whether a sort operation will be done serially or in parallel. When sort_resouces is on, Adaptive Server prints the sorting plan but does not execute the create index statement.
set statistics io {on | off}
displays
the following statistics information for each table referenced in the
statement:
the
number of times the table is accessed (scan count)
the
number of logical reads (pages accessed in memory)
and
the number of physical reads (database device accesses)
For
each command, statistics io displays the number of buffers written.
If
Adaptive Server has been configured to enforce resource limits, statistics io
also displays the total I/O cost.
set statistics subquerycache {on | off}
displays
the number of cache hits, misses, and the number of rows in the subquery cache
for each subquery.
set statistics time {on | off}
displays the amount of time Adaptive Server used to parse and compile for each command. For each step of the command, statistics time displays the amount of time Adaptive Server used to execute the command. Times are given in milliseconds and timeticks, the exact value of which is machine-dependent.
set statistics simulate { on | off }
specifies
that the optimizer should use simulated statistics to optimize the query.
set strict_dtm_enforcement {on | off}
determines
whether the server propagates transactions to servers that do not support
Adaptive Server transaction coordination services. The default value is
inherited from the value of the strict dtm enforcement configuration parameter.
set string_rtruncation {on | off}
determines
whether Adaptive Server raises a SQLSTATE exception when an insert or update
command truncates a char, unichar, varchar or univarchar string. If the
truncated characters consist only of spaces, no exception is raised. The
default setting, off, does not raise the SQLSTATE exception, and the character
string is silently truncated.
set table count number
sets
the number of tables that Adaptive Server considers at one time while
optimizing a join. The default used depends on the number of tables in the
join:
Tables joined |
Tables considered at a
time |
2 – 25 |
4 |
26 – 37 |
3 |
38 – 50 |
2 |
Valid values are 0 - 8. A value of 0 resets the default behavior. A value greater than 8 defaults to 8. table count may improve the optimization of certain join queries, but it increases the compilation cost.
set textsize {number}
specifies the maximum size in bytes of text or image type data that is returned with a select statement. The @@textsize global variable stores the current setting. To reset textsize to the default size (32K), use: set textsize 0
The
default setting is 32K in isql. Some client software sets other default values.
set transaction isolation level {
[ read
uncommitted | 0 ] |
[ read committed
| 1 ] |
[ repeatable read
| 2 ]|
[ serializable |
3 ] }
sets the transaction isolation level for your session. After you set this option, any current or future transactions operate at that isolation level.
read
uncommitted | 0
scans
at isolation level 0 do not acquire any locks. Therefore, the result set of a
level 0 scan may change while the scan is in progress. If the scan position is
lost due to changes in the underlying table, a unique index is required to
restart the scan. In the absence of a unique index, the scan may be aborted.
By
default, a unique index is required for a level 0 scan on a table that does not
reside in a read-only database. You can override this requirement by forcing
the Adaptive Server to choose a nonunique index or a table scan, as follows:
select * from table_name (index table_name)
Activity on the underlying table may cause the scan
to be aborted before completion.
read
committed | 1
By
default, Adaptive Server's transaction isolation level is read committed or 1,
which allows shared read locks on data.
repeatable
read | 2
prevents nonrepeatable reads.
serializable
| 3
specify
isolation level 3, Adaptive Server applies a holdlock to all select and
readtext operations in a transaction, which holds the queries' read locks until
the end of that transaction. If you also set chained mode, that isolation level
remains in effect for any data retrieval or modification statement that
implicitly begins a transaction.
set transactional_rpc {on | off}
controls
the handling of remote procedure calls. If this option is set to on, when a
transaction is pending, the RPC is coordinated by Adaptive Server. If this
option is set to off, the remote procedure call is handled by the Adaptive
Server site handler. The default value is inherited from the value of the enable
xact coordination configuration parameter.