如何salary将employee表中列的列大小更改numeric(18,0)为numeric(22,5)
如何从YYYY-MM-DD格式的SQL Server中检索日期?我需要这个与SQL Server 2000及更高版本一起工作.有没有一种简单的方法在SQL Server中执行此操作,还是在检索结果集后以编程方式更容易地进行转换?
我已阅读Microsoft Technet上的CAST和CONVERT,但未列出我想要的格式,并且不能更改日期格式.
使用TSQL检查SQL Server上是否存在数据库的理想方法是什么?似乎有多种方法可以实现这一点.
使用SQL Server,我有......
ID SKU PRODUCT
=======================
1 FOO-23 Orange
2 BAR-23 Orange
3 FOO-24 Apple
4 FOO-25 Orange
Run Code Online (Sandbox Code Playgroud)
我想要
1 FOO-23 Orange
3 FOO-24 Apple
Run Code Online (Sandbox Code Playgroud)
这个问题不是让我在那里.如何在一列上选择DISTINCT?
SELECT
[ID],[SKU],[PRODUCT]
FROM [TestData]
WHERE ([PRODUCT] =
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%'))
ORDER BY [ID]
Run Code Online (Sandbox Code Playgroud) 我从来没有为SQL Server"手动编码"对象创建代码,并且外键修改在SQL Server和Postgres之间看似不同.这是我的sql到目前为止:
drop table exams;
drop table question_bank;
drop table anwser_bank;
create table exams
(
exam_id uniqueidentifier primary key,
exam_name varchar(50),
);
create table question_bank
(
question_id uniqueidentifier primary key,
question_exam_id uniqueidentifier not null,
question_text varchar(1024) not null,
question_point_value decimal,
constraint question_exam_id foreign key references exams(exam_id)
);
create table anwser_bank
(
anwser_id uniqueidentifier primary key,
anwser_question_id uniqueidentifier,
anwser_text varchar(1024),
anwser_is_correct bit
);
Run Code Online (Sandbox Code Playgroud)
当我运行查询时,我收到此错误:
消息8139,级别16,状态0,行9外键中的引用列数与引用列的数量不同,表'question_bank'.
你能发现错误吗?
我需要使用表名和表的模式列出SQL Server数据库中的所有触发器.
我几乎在这里:
SELECT trigger_name = name, trigger_owner = USER_NAME(uid),table_schema = , table_name = OBJECT_NAME(parent_obj),
isupdate = OBJECTPROPERTY( id, 'ExecIsUpdateTrigger'), isdelete = OBJECTPROPERTY( id, 'ExecIsDeleteTrigger'),
isinsert = OBJECTPROPERTY( id, 'ExecIsInsertTrigger'), isafter = OBJECTPROPERTY( id, 'ExecIsAfterTrigger'),
isinsteadof = OBJECTPROPERTY( id, 'ExecIsInsteadOfTrigger'),
[disabled] = OBJECTPROPERTY(id, 'ExecIsTriggerDisabled')
FROM sysobjects INNER JOIN sysusers ON sysobjects.uid = sysusers.uid
WHERE type = 'TR'
Run Code Online (Sandbox Code Playgroud)
我只需要获取表的模式.
我在我的一个Sql(2008)存储过程中有以下代码执行完全正常:
CREATE PROCEDURE [dbo].[Item_AddItem]
@CustomerId uniqueidentifier,
@Description nvarchar(100),
@Type int,
@Username nvarchar(100),
AS
BEGIN
DECLARE @TopRelatedItemId uniqueidentifier;
SET @TopRelatedItemId =
(
SELECT top(1) RelatedItemId
FROM RelatedItems
WHERE CustomerId = @CustomerId
)
DECLARE @TempItem TABLE
(
ItemId uniqueidentifier,
CustomerId uniqueidentifier,
Description nvarchar(100),
Type int,
Username nvarchar(100),
TimeStamp datetime
);
INSERT INTO Item
OUTPUT INSERTED.* INTO @TempItem
SELECT NEWID(), @CustomerId, @Description, @Type, @Username, GETDATE()
SELECT
ItemId,
CustomerId,
@TopRelatedItemId,
Description,
Type,
Username,
TimeStamp
FROM
@TempItem
END
GO
Run Code Online (Sandbox Code Playgroud)
所以你们的问题是有可能做一些事情:
DECLARE @TempCustomer TABLE
(
CustomerId …Run Code Online (Sandbox Code Playgroud) 假设我有以下简单的表变量:
declare @databases table
(
DatabaseID int,
Name varchar(15),
Server varchar(15)
)
-- insert a bunch rows into @databases
Run Code Online (Sandbox Code Playgroud)
如果我想遍历行,是声明和使用游标我唯一的选择吗?还有另外一种方法吗?
当我得到不同的记录计数时,出现了这个问题,我认为是使用not in where约束的相同查询,另一个是a left join.not in约束中的表有一个空值(坏数据),导致该查询返回0个记录的计数.我有点理解为什么,但我可以使用一些帮助来完全理解这个概念.
简单地说,为什么查询A返回结果但B不返回?
A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)
Run Code Online (Sandbox Code Playgroud)
这是在SQL Server 2005上.我还发现调用set ansi_nulls off导致B返回结果.
我有一根绳子,@mainString = 'CATCH ME IF YOU CAN'.我想检查这个词是否在ME里面@mainString.
如何在SQL中检查字符串是否具有特定的子字符串?